package DP.builder.car.direct;

import DP.builder.car.builder.impl.BMWBuilder;
import DP.builder.car.builder.impl.BenzBuilder;
import DP.builder.car.product.impl.BMWModel;
import DP.builder.car.product.impl.BenzModel;

import java.util.ArrayList;

/**
 * @author msi
 * 导演类
 */
public class Director {
    private ArrayList<String> sequence = new ArrayList<>();
    private BMWBuilder bmwBuilder=new BMWBuilder();
    private BenzBuilder benzBuilder=new BenzBuilder();

    /**
     * A类型的Benz，先start --> stop
     */
    public BenzModel getABenzModel(){
        //清理场景，这里是一些初级程序员不注意的地方
        this.sequence.clear();
        //A模型的执行顺序
        this.sequence.add("start");
        this.sequence.add("stop");
        //返回一个Benz模型
        this.benzBuilder.setSequence(this.sequence);
        return (BenzModel) this.benzBuilder.getCarModel();
    }

    /**
     * B类型的Benz，先start --> alarm--> stop
     */
    public BenzModel getBBenzModel(){
        //清理场景，这里是一些初级程序员不注意的地方
        this.sequence.clear();
        //A模型的执行顺序
        this.sequence.add("start");
        this.sequence.add("alarm");
        this.sequence.add("stop");
        //返回一个Benz模型
        this.benzBuilder.setSequence(this.sequence);
        return (BenzModel) this.benzBuilder.getCarModel();
    }

    /**
     * C类型的BMW，先start --> alarm--> stop
     */

    public BMWModel getCBMWModel(){
        //清理场景，这里是一些初级程序员不注意的地方
        this.sequence.clear();
        //A模型的执行顺序
        this.sequence.add("start");
        this.sequence.add("alarm");
        this.sequence.add("stop");
        //返回一个BMW模型
        this.bmwBuilder.setSequence(this.sequence);
        return (BMWModel) this.bmwBuilder.getCarModel();
    }

    /**
     * 等其他的方法
     */
}
